import runtimeType from '../runtimeType';
import toQueryString from '../../data/toQueryString';

/**
 * 【异步方法】跳转页面
 * @param url 跳转页面地址
 * @param data 页面传参
 * @param 跳转方式，值域：open-当页入栈跳转、replace-清除当页再跳转、tab-会关闭其它非tab、relaunch-重新打开
 */
function pageJump(url = '', data = {}, type = 'open') {
    
    // 跳转页面地址 转化为 字符串格式
    let path_page = url.toString();
    // 将数据转换为名称/值对编码字符串
    let str_query = toQueryString(data);
    // 如果转换成功
    if (str_query) { path_page = path_page + '?' + str_query; }
    
    // 获取当前运行环境
    let runType = runtimeType();
    // 如果是“非UNI”环境
    if (runType == 'NOT-UNI')
    {
        // 新窗口跳转
        if (type == "open") { window.open(path_page); }
        // 清除当页再跳转
        else if (type == "replace") { window.location.replace(path_page); }
        // 会关闭其它非tab/重新打开
        else if (type == "tab" || type == "relaunch")
        {
            // 获取当前页面栈长度 - 1
            let langth_history = window.history.length - 1;
            // 页面返回到栈最底层
            window.history.go()(-langth_history);
            // 修改当前历史记录实体
            window.history.replaceState({}, '', path_page);
        }
        // 无设置的默认跳转
        else { window.location.assign(path_page); }
    }
    // 如果是UNI环境
    else {
        // 新窗口跳转
        if (type == "open") { uni.navigateTo({ url: path_page }); }
        // 清除当页再跳转
        else if (type == "replace") { uni.redirectTo({ url: path_page }); }
        // 会关闭其它非tab
        else if (type == "tab") { uni.switchTab({ url: path_page }); }
        // 重新打开
        else if (type == "relaunch") { uni.reLaunch({ url: path_page }); }
        // 无设置的默认跳转
        else { uni.navigateTo({ url: path_page }); }
    }
    
}

export default pageJump;